package cn.lingyangwl.agile.pay.common.utils;

import cn.hutool.core.net.url.UrlBuilder;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;
import java.util.Optional;

/**
 * @author shenguangyang
 */
public class StringKit {

    /**
     * 拼接url参数: 旧版采用Hutool方式（当回调地址是 http://abc.com/#/abc 时存在位置问题）
     */
    @Deprecated
    public static String appendUrlQueryWithHutool(String url, Map<String, Object> map) {

        if (StringUtils.isEmpty(url) || map == null || map.isEmpty()) {
            return url;
        }
        UrlBuilder result = UrlBuilder.of(url);
        map.forEach((k, v) -> {
            if (k != null && v != null) {
                result.addQuery(k, v.toString());
            }
        });

        return result.build();
    }


    /**
     * 对字符加星号处理：除前面几位和后面几位外，其他的字符以星号代替
     *
     * @param content  传入的字符串
     * @param frontNum 保留前面字符的位数
     * @param endNum   保留后面字符的位数
     * @return 带星号的字符串
     */
    public static String str2Star2(String content, int frontNum, int endNum) {
        if (frontNum >= content.length() || frontNum < 0) {
            return content;
        }
        if (endNum >= content.length() || endNum < 0) {
            return content;
        }
        if (frontNum + endNum >= content.length()) {
            return content;
        }
        String starStr = "";
        for (int i = 0; i < (content.length() - frontNum - endNum); i++) {
            starStr = starStr + "*";
        }
        return content.substring(0, frontNum) + starStr
                + content.substring(content.length() - endNum, content.length());
    }

    /**
     * 对字符加星号处理：除前面几位和后面几位外，其他的字符以星号代替
     *
     * @param content  传入的字符串
     * @param frontNum 保留前面字符的位数
     * @param endNum   保留后面字符的位数
     * @param starNum  指定star的数量
     * @return 带星号的字符串
     */
    public static String str2Star(String content, int frontNum, int endNum, int starNum) {
        if (frontNum >= content.length() || frontNum < 0) {
            return content;
        }
        if (endNum >= content.length() || endNum < 0) {
            return content;
        }
        if (frontNum + endNum >= content.length()) {
            return content;
        }
        String starStr = "";
        for (int i = 0; i < starNum; i++) {
            starStr = starStr + "*";
        }
        return content.substring(0, frontNum) + starStr
                + content.substring(content.length() - endNum, content.length());
    }


    /**
     * 合并两个json字符串
     * key相同，则后者覆盖前者的值
     * key不同，则合并至前者
     *
     * @param originStr
     * @param mergeStr
     * @return 合并后的json字符串
     */
    public static String marge(String originStr, String mergeStr) {

        if (StringUtils.isAnyBlank(mergeStr)) {
            return originStr;
        }

        JSONObject originJSON = Optional.ofNullable(JSONObject.parseObject(originStr)).orElse(new JSONObject());
        JSONObject mergeJSON = JSONObject.parseObject(mergeStr);

        if (mergeJSON == null) {
            return originStr;
        }

        originJSON.putAll(mergeJSON);
        return originJSON.toJSONString();
    }

}
